██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
CPython
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
mwbqCPython è l'mwbgimplementazione di riferimento del linguaggio mwbwPython. Scritto in mwcaC e Python, CPython è l'implementazione predefinita e più utilizzata del linguaggio Python.
CPython può essere definito sia come mwcginterprete che come mwcwcompilatore. Quando viene eseguito uno script Python, CPython effettua una prima fase di mwdacompilazione del mwdqcodice sorgente in un formato intermedio chiamato mwdgbytecode. Questo bytecode è una rappresentazione del codice Python ottimizzata per l'esecuzione dalla Python Virtual Machine. Successivamente, CPython mwdwinterpreta questo mweabytecode riga per riga e le esegue una alla volta.
Contents
• Progetto
• Altri
• Note
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Progetto
Una caratteristica particolare di CPython è che utilizza mwfaGlobal Interpreter Lock (GIL)mwfq, cite-ref-1[1] un meccanismo che permette l'esecuzione di un solo mwggthread Python alla volta su un singolo processore.cite-ref-2[2] Questo non significa che il mwhwmultithreading non abbia senso: ad esempio se il tuo codice è spesso in attesa di input/output, rilascia il GIL, permettendo ad altri thread di essere eseguiti.
Questa potrebbe essere la situazione tipica quando più thread servono client separati. Un thread potrebbe essere in attesa della risposta da un client, un altro potrebbe essere in attesa dell'esecuzione di una query al mwiqdatabase, mentre il terzo thread sta elaborando il codice Python.
Nelle applicazioni reali sono piuttosto rare le situazioni in cui il GIL rappresenta un collo di bottiglia significativo. Questo perché Python è un linguaggio intrinsecamente lento e generalmente non utilizzato per operazioni che richiedono un uso intensivo della mwjgCPU o che richiedono bassi tempi di risposta. Python è solitamente utilizzato ad alto livello e richiama funzioni e librerie per eseguire attività specializzate. Tali librerie non sono scritte in Python e, il codice Python in un altro thread, può essere eseguito mentre viene eseguita una chiamata a uno di questi processi sottostanti. Le librerie non Python non sono soggette a GIL e possono eseguire contemporaneamente molti thread su più processori senza restrizioni.
Per ottenere vera concorrenza in Python, è necessario ricorrere a processi dell'interprete Cpython separati e gestiti dal sistema operativo. La comunicazione tra processi separati può essere più complessa rispetto alla comunicazione tra thread. Il modulo mwkamultiprocessing offre alcune soluzioni, ma può ancora introdurre overhead.
La presenza del GIL semplifica l'implementazione di CPython e facilita l'implementazione di applicazioni multi-thread che non traggono vantaggio dall'esecuzione simultanea di codice Python. Senza GIL, la concorrenza diventerebbe responsabilità dello sviluppatore che dovrebbe gestire esplicitamente la sincronizzazione tra i diversi thread per evitare mwkgrace conditions e altri problemi legati alla mwkwconcorrenza.
Sebbene siano state avanzate numerose proposte per eliminare GIL ma considerando una serie di fattori complessi è stato deciso di mantenerlo. Sebbene GIL possa limitare le prestazioni in alcune applicazioni, offre un buon compromesso tra semplicità, stabilità e prestazioni per la maggior parte degli sviluppatori Python. Per consentire un maggiore parallelismo, nell'ottobre 2023 è stato rilasciato un miglioramento che permette l'utilizzo di un GIL separato per sotto-interprete in un singolo processo Python e sono stati descritti come "thread con condivisione opt-in".cite-ref-3[3]cite-ref-4[4]
Piattaforme supportate
Le piattaforme ufficialmente supportate a livello-1 sono mwqaLinux per Intel a 64 bit che utilizza una toolchain GCC, mwqqmacOS per Intel a 64 bit e ARM e mwqgMicrosoft Windows per Intel a 32 e 64 bit. Esiste un supporto ufficiale di livello 2 per Linux per ARM a 64 bit, wasm32 (mwqwWebAssembly) con supporto runtime WASI e Linux per Intel a 64 bit tramite una toolchain clang. I sistemi con supporto di livello 3 includono ARM Windows a 64 bit, iOS a 64 bit, mwraRaspberry Pi OS (Linux per armv7 con hard float), Linux per PowerPC a 64 bit in modalità little-endian e Linux per s390x .
Altre piattaforme hanno implementazioni funzionanti, tra cui:cite-ref-7[7]
Sistemi Unix-like
• mwtqAIX
• mwtwBSD
• mwuqDarwin
• mwuwFreeBSD
• mwvqHP-UX
• mwvwillumos
• mwwqLinux
• mwwwmacOS
• mwxqNetBSD
• mwxwOpenBSD
• mwyqPlan 9
• mwywSolaris
• mwzqTru64
Sistemi dedicati ed embedded
• mwaqAndroid
• mwawApple iOS
• mwbqBlackBerry 10
• mwbwGP2X
• mwcqiPodLinux
• mwcwNintendo DS
• mwdqGameCube
• mwdwSymbian OS Series60
• mwewNokia N800
• Nokia N810
• mwfwNokia N900
• mwgqOpenmoko
• mwgwPalm OS
• mwhqPlayStation 2
• mwhwPlayStation 3 mwia(FreeBSD)
• mwigPsion
• mwjaQNX
• mwjgSharp Zaurus
• mwkwVxWorks
Altri
Enterprise Linux
Queste versioni di Python sono distribuite con le distribuzioni Linux enterprise attualmente supportate.cite-ref-8[8] Lo stato del supporto di Python nella tabella si riferisce al supporto da parte del team principale di Python e non da parte del responsabile della distribuzione.
| Versione della distribuzione | Fine vita della distribuzione | Versione di Python | Versione di Python |
|---|---|---|---|
| Ubuntu 22.04 LTS (Jammy Jellyfish) | | | 3.10 |
| Ubuntu 20.04 LTS (Focal Fossa) | 2030-04 [ 9 ] | [ 10 ] | Versione precedente ancora supportata: 3.8 [ 11 ] |
| Ubuntu 18.04 LTS (Bionic Beaver) | 2028-04 [ 12 ] | Vecchia versione non più supportata: 2.7 [ 13 ] | Vecchia versione non più supportata: 3.6 [ 14 ] |
| Ubuntu 16.04 LTS (Xenial Xerus) | 2021-04-30 [ 15 ] | Vecchia versione non più supportata: 2.7 [ 13 ] | Vecchia versione non più supportata: 3.5 [ 14 ] |
| Debian 12 | 2028-06 [ 16 ] | | Versione precedente ancora supportata: 3.11 [ 16 ] |
| Debian 11 | 2026-06 [ 17 ] | | Versione precedente ancora supportata: 3.9 [ 17 ] |
| Debian 10 | 2024-06 [ 18 ] | Vecchia versione non più supportata: 2.7 [ 19 ] | Versione precedente ancora supportata: 3.7 [ 20 ] |
| Debian 9 | 2022-06-30 [ 21 ] | Vecchia versione non più supportata: 2.7 [ 22 ] | Vecchia versione non più supportata: 3.5 [ 23 ] |
| Red Hat Enterprise Linux 8 | 2029 | Vecchia versione non più supportata: 2.7 [ 24 ] | Vecchia versione non più supportata: 3.6 |
| Red Hat Enterprise Linux 7 | 2024-11-30 [ 25 ] | Vecchia versione non più supportata: 2.7 [ 26 ] | |
| CentOS 8 | 2029-05-31 | Vecchia versione non più supportata: 2.7 | Vecchia versione non più supportata: 3.6 |
| CentOS 7 | 2024-06-30 | Vecchia versione non più supportata: 2.7 [ 27 ] | |
| SUSE Linux Enterprise Server 15 | 2031-07-31 | Vecchia versione non più supportata: 2.7 [ 28 ] | Vecchia versione non più supportata: 3.6 |
| SUSE Linux Enterprise Server 12 | 2027-10-31 | Vecchia versione non più supportata: 2.7 [ 29 ] | |
| SUSE Linux Enterprise Server 11 | 2022-03-31 | Vecchia versione non più supportata: 2.7 [ 29 ] | |
| Legenda: Vecchia versione Versione precedente ancora supportata Versione corrente Ultima versione di anteprima Versione futura | Legenda: Vecchia versione Versione precedente ancora supportata Versione corrente Ultima versione di anteprima Versione futura | Legenda: Vecchia versione Versione precedente ancora supportata Versione corrente Ultima versione di anteprima Versione futura | Legenda: Vecchia versione Versione precedente ancora supportata Versione corrente Ultima versione di anteprima Versione futura |
Alternative
CPython è una delle numerose mwawoimplementazioni Python. Esistono però alternative tra cui: mwawsJython, scritto in mwawwJava per la mwaw0Java virtual machine (JVM); mwaw4PyPy, scritto in mwaw8RPython e tradotto in C; e mwaxaIronPython, scritto in mwaxeC# per la mwaxiCommon Language Infrastructure.
Sono numerose anche le implementazioni sperimentali.cite-ref-30[30]
Note
cite-note-11. ↑ mwax4(mwax8mwayaEN) mwayemwayiglobal interpreter lock in CPython, su mwaymdocs.python.org.
cite-note-22. ↑ mwaycmwaygdocs.python.org, mwaykhttps://docs.python.org/3/c-api/init.htmlmwayo Titolo mancante per url mwaysurl (aiuto). mway0URL consultato il 4 giugno 2020.
cite-note-33. ↑ mwaziJake Edge, mwazmlwn.net, mwazqhttps://lwn.net/Articles/941090/mwazu Titolo mancante per url mwazyurl (aiuto). mwazgURL consultato il 13 gennaio 2024.
cite-note-44. ↑ mwaz0mwaz4peps.python.org, mwaz8https://peps.python.org/pep-0684/mwaaa Titolo mancante per url mwaaeurl (aiuto). mwaamURL consultato il 13 gennaio 2024.
cite-note-55. ↑ mwaag(mwaakmwaaoEN) mwaaspeps.python.org, mwaawhttps://peps.python.org/pep-0703/mwaa0 Titolo mancante per url mwaa4url (aiuto). mwabaURL consultato il 17 settembre 2023.
cite-note-66. ↑ mwabumwabypeps.python.org, mwabchttps://peps.python.org/pep-0719/#schedulemwabg Titolo mancante per url mwabkurl (aiuto). mwabsURL consultato il 17 settembre 2023.
cite-note-77. ↑ mwacamwacewiki.python.org, mwacihttps://wiki.python.org/moin/PythonImplementationsmwacm Titolo mancante per url mwacqurl (aiuto). mwacyURL consultato il 19 luglio 2012.
cite-note-88. ↑ mwacsmwacwlinuxlifecycle.com, mwac0https://web.archive.org/web/20220329014218/https://linuxlifecycle.com/mwac4 Titolo mancante per url mwac8urlarchivio (aiuto). mwadeURL consultato il 15 ottobre 2017 mwadi(archiviato dall'mwadmurl originale il 29 marzo 2022).
cite-note-91. mwadgmwadkUbuntu, mwadohttps://ubuntu.com/about/release-cyclemwads Titolo mancante per url mwadwurl (aiuto). mwad4URL consultato il 18 gennaio 2021.
cite-note-102. mwaemmwaeqphoronix.com, mwaeuhttps://www.phoronix.com/news/Python-2-EOL-Ubuntu-20.04mwaey Titolo mancante per url mwaecurl (aiuto). mwaekURL consultato il 1º aprile 2020.
cite-note-113. mwae4mwae8mwafaBinary package "python3" in ubuntu focal, su mwafeLaunchpad.net.
cite-note-124. mwafumwafyserverwatch.com, mwafchttps://www.serverwatch.com/server-news/canonical-extends-ubuntu-18.04-lts-linux-support-to-10-years.htmlmwafg Titolo mancante per url mwafkurl (aiuto). mwafsURL consultato il 9 settembre 2019.
cite-note-ubuntu-py2-135. mwagimwagmmwagqpython-defaults package: Ubuntu, su mwagulaunchpad.net, Canonical Ltd., 8 giugno 2018. mwagyURL consultato l'8 giugno 2018.
cite-note-ubuntu-py3-146. mwagwmwag0mwag4python3-defaults package: Ubuntu, su mwag8launchpad.net, Canonical Ltd., 8 giugno 2018. mwahaURL consultato l'8 giugno 2018.
cite-note-157. mwahqmwahucomputing.cs.cmu.edu, mwahyhttps://computing.cs.cmu.edu/news/2020/eol-ubuntu-1604mwahc Titolo mancante per url mwahgurl (aiuto). mwahoURL consultato il 15 febbraio 2021.
cite-note-debian12-168. mwaiemwaiidebian.org, mwaimhttps://www.debian.org/News/2023/20230610mwaiq Titolo mancante per url mwaiuurl (aiuto).
cite-note-debian-org-179. mwai0mwai4debian.org, mwai8https://www.debian.org/News/2021/20210814.en.htmlmwaja Titolo mancante per url mwajeurl (aiuto). mwajmURL consultato il 4 gennaio 2022.
cite-note-1810. mwajgmwajkwiki.debian.org, mwajohttps://wiki.debian.org/LTSmwajs Titolo mancante per url mwajwurl (aiuto). mwaj4URL consultato il 15 febbraio 2021.
cite-note-1911. mwakmmwakqmwakuDebian -- Details of package python in buster, su mwakypackages.debian.org. mwakcURL consultato il 13 settembre 2019.
cite-note-2012. mwaksmwakwmwak0Debian -- News -- Debian 10 "buster" released, su mwak4debian.org. mwak8URL consultato il 9 agosto 2019.
cite-note-2113. mwalmmwalqdebian.org, mwaluhttps://www.debian.org/News/2020/20200709.en.htmlmwaly Titolo mancante per url mwalcurl (aiuto). mwalkURL consultato il 15 febbraio 2021.
cite-note-2214. mwal4mwal8mwamaDistroWatch.com: Debian, su mwamedistrowatch.com, 15 ottobre 2017. mwamiURL consultato il 15 ottobre 2017.
cite-note-2315. mwamymwamcmwamgDebian -- Details of package python3 in stretch, su mwamkpackages.debian.org. mwamoURL consultato il 19 dicembre 2017.
cite-note-2416. mwam4(mwam8mwanaEN) mwanemwaniPython in RHEL 8, su mwanmRed Hat Developer Blog, 14 novembre 2018. mwanqURL consultato il 10 maggio 2019 mwanu(archiviato dall'mwanyurl originale il 10 maggio 2019).
cite-note-0-2517. mwanomwansRed Hat Customer Portal, mwanwhttps://access.redhat.com/support/policy/updates/erratamwan0 Titolo mancante per url mwan4url (aiuto). mwaoaURL consultato il 1º aprile 2020.
cite-note-2618. mwaoumwaoymwaocDistroWatch.com: Red Hat Enterprise Linux, su mwaogdistrowatch.com, 7 settembre 2017. mwaokURL consultato il 15 ottobre 2017.
cite-note-2719. mwao0mwao4mwao8DistroWatch.com: CentOS, su mwapadistrowatch.com, 14 settembre 2017. mwapeURL consultato il 15 ottobre 2017.
cite-note-2820. mwapumwapymwapcRelease Notes | SUSE Linux Enterprise Desktop/SUSE Linux Enterprise Workstation Extension 15 GA, su mwapgsuse.com. mwapkURL consultato l'8 agosto 2019.
cite-note-distrowatch-opensuse-2921. mwap8mwaqamwaqeDistroWatch.com: openSUSE, su mwaqidistrowatch.com, 14 ottobre 2017. mwaqmURL consultato il 15 ottobre 2017.
cite-note-3030. ↑ mwaqcmwaqgAlex Martelli, mwaqkmwaqoPython in a Nutshell, 2nd, mwaqsO'Reilly, 2006, pp.mwaqw mwaq05–7, mwaq4ISBNmwaq8 978-0-596-10046-9.
Collegamenti esterni
• Sito ufficiale, su python.org.
• CPython / CPython (altra versione) / CPython (altra versione), su packages.debian.org.
• Repository sorgenti di CPython, su github.com.
• Sito di segnalazione bug, su bugs.python.org.
• Sito di segnalazione bug, su github.com.
• citereffree-software-directory(EN) CPython, su Free Software Directory.